home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
et
/
et3_0-a1.lha
/
et3
/
src
/
Smart.h
< prev
next >
Wrap
C/C++ Source or Header
|
1992-04-27
|
1KB
|
43 lines
#ifndef Smart_First
#define Smart_First
#include "Types.h"
#define SmartDef(name) \
class name2(name, Ptr) { \
int died; \
class name *g; \
name *make(); \
public: \
name2(name, Ptr)() \
{ g= 0; died= 0; } \
~name2(name, Ptr)(); \
name *operator -> () \
{ return make(); } \
operator name* () \
{ return make(); } \
}; \
extern name2(name, Ptr)
#define _SmartImpl(name,expr) \
name2(name, Ptr)::~name2(name, Ptr) \
{ \
if (g) delete g; died= 1; \
} \
name *name2(name, Ptr)::make() \
{ \
if (g) \
return g; \
if (died) { \
fprintf(stderr, "error\n"); \
return 0; \
} \
return g= expr; \
} \
name2(name, Ptr)
#define SmartImpl(name) _SmartImpl(name,new name)
#endif